/*
 * @Author: your name
 * @Date: 2020-08-23 20:40:09
 * @LastEditTime: 2020-08-28 08:46:54
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \新建文件夹\two-app\src\store\login\index.js
 */
import { loginuser, getUserInfo } from '../../api/login'
import router from '../../router'
import { Message } from 'view-design'
import Cookies from 'js-cookie'

const state = {
  userInfo: {
    user_id: '',
    user_name: '',
    identity_id: '',
    // 这个表示代表身份字段 ---管理者
    identity_text: ''
  }
}

const mutations = {
  getUserInfo(state, payload) {
    state.userInfo = payload
  }
}

const actions = {
  // 登录
  // actions ---里面的第一个参数，是----当前上下文对象----当前vuex实例
  // 第二个表示调用这个方法所传递的参数
  async loginUser({ dispatch }, payload) {
    const { data: res } = await loginuser(payload)
    console.log(res)
    if (res.code !== 1) {
      Message.error(res.msg)
    }
    // 在action方法里面调用另外一个action方法
    dispatch('getuser')
    Message.success('登录成功')
    Cookies.set('token', res.token)
    // router.replace('/home/welcome').catch(err => { return err })
    router.replace('/home/welcome')
  },
  async getuser({ commit, dispatch }) {
    const { data: res } = await getUserInfo()
    console.log(res)
    if (res.code !== 1) {
      Message.error(res.msg)
    }
    // 如果想要调用另外一个模块的acionts----第三个参数加上{root：true}
    sessionStorage.setItem('userInfo', res.data.identity_text)
    dispatch('GetAuth/getRoutes', res.data.identity_text, { root: true })
    // 存储一下用户id ---备用
    sessionStorage.setItem('user_id', res.data.user_id)
    // 调用更改状态的方法，去给state赋值
    commit('getUserInfo', res.data)
  }
}

export default {
  // 命令空间，为了在多人开发的时候防止命名冲突的一个手段
  // 因为最终需要在store.index 里面--引入各个模块,
  // 为了防止命名冲突，如果加上这么一个字段之后,在不同的页面中
  // 引入getters,actions，mutations时候，需要加上所属的模块名
  namespaced: true,
  state,
  mutations,
  actions
}
